/**
 * Создает модели по описанию таблиц БД
 */
var createModels = function() {
	Ext.each(dataSync.tables, function(t, idx, tables){
        var fieldsArray = [],
            assArray = [];
        
        Ext.each (t.columns, function(c){
            fieldsArray.push({
                name: c.name,
                useNull: true,
                type: (function (dbtype){
                	console.log(dbtype);
                	switch (dbtype.substr(0,3)) {
                        case 'int':
                            return 'int';
                        case 'dec':
                            return 'float';
                	}
                	return 'string';
                })(c.type)
            });

            if (c.fk)
                assArray.push({
                    type: 'belongsTo',
                    model: c.fk.parent.name,
                    foreignKey: c.name
                });
        });
        
        Ext.each(t.deps, function(dep){
            assArray.push({
                type: 'hasMany',
                model: dep.child.name,
                foreignKey: dep.fk.column.name,
                name: dep.name,
                storeConfig:{
                    proxy: {type:'sql', engine: dataSync}
                }
            });
        });
        
        Ext.regModel(t.name, {
            fields: fieldsArray,
            associations: assArray,
            proxy: {
                type: 'sql',
                tableName: t.name,
                engine: dataSync
            }
        });
        !IOrders.stores && (IOrders.stores = {});
        t.createStore && (IOrders.stores[t.name] = new Ext.data.Store({
        	autoLoad: true,
        	model: t.name,                    
            proxy: {
                type: 'sql',
                engine: dataSync,
                tableName: t.name
            }}));
        
    });
};

/**
 * Создает описание компонентов FiedSet для просмотра и редактирования модели
 */
var createFiedSet = function(tableName) {
	var items = [];
	Ext.each(dataSync.tables[tableName].columns, function(column) {
		if(!column.isShow) {
			return true;
		}
		if (column.fk) {
            items.push({
            	xtype: 'selectfield',
                name: column.name,
                valueField: 'id',
                displayField: 'name',                
                store: IOrders.stores[column.fk.parent.name]
            });
		} else {
			items.push(Ext.apply({name: column.name}, column.fieldConfig ? column.fieldConfig : 'textfield'));
		}
	});
	return {
		xtype: 'fieldset',
		items: items
	};
};

var createEntitiesList = function(config) {
	var table = dbSchema.tables[config.tableName];
	return {
			xtype: 'list',
			loadingText: 'Подождите. Идет загрузка',
			itemTpl: table.itemTpl,
			grouped: table.grouped,
			indexBar: rusIndexBar,
			store: new Ext.data.Store({
				model: config.tableName,
				sorters: table.sorters,
				groupedString: table.groupedString,
				getGroupString: table.grouped ? function(record) {
			        return record.get(this.groupedString)[0];
			    } : Ext.emptyFn
			}),
			listeners: {
				itemtap: function(list, idx, item) {
					var record = list.store.getAt(idx);
		            Ext.dispatch({
		                controller: 'Navigator',
		                action: 'onEntityChoose',
		                tableName: list.store.model.modelName,
		                entityRecord: record,
		                ownerView: list.up('panel')
		            });
				}
			}
	};
};